/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.catosist.run.business.gestorMantenimiento;

import com.catosist.run.dataaccess.domain.MantenimientoDao;
import com.catosist.run.dataaccess.domain.VehiculoDao;
import com.catosist.run.dataaccess.model.MantenimientoVO;
import com.catosist.run.dataaccess.model.VehiculoVO;
import com.catosist.run.services.MantenimientoDTO;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;



/**
 *
 * @author Bicho
 */
public class GestorMantenimientoImpl implements GestorMantenimiento {

    public List<MantenimientoDTO> getAll() {

        List<MantenimientoVO> mantenimientoVOs = mantenimientoDao.getAll();
        List<MantenimientoDTO> mantenimientoDTOs = new LinkedList<MantenimientoDTO>();
        for (Iterator<MantenimientoVO> it = mantenimientoVOs.iterator(); it.hasNext();) {
            MantenimientoVO mantenimientoVO = it.next();
            mantenimientoDTOs.add(new MantenimientoDTO(mantenimientoVO.getId(),
                    mantenimientoVO.getDescripcion(),
                    mantenimientoVO.getTotal(),
                    mantenimientoVO.getVehiculo().getId(),
                    mantenimientoVO.getFecha(),
                    mantenimientoVO.getCantidad(),
                    mantenimientoVO.getUnidadmedida(),
                    mantenimientoVO.getDetalle(),
                    mantenimientoVO.getPreciounitario()));

        }
        return mantenimientoDTOs;
    }

    public List<MantenimientoDTO> getMantenimientosById(int vehiculoId) {

        List<MantenimientoVO> mantenimientoVOs = mantenimientoDao.getMantenimientoById(vehiculoId);
        List<MantenimientoDTO> mantenimientoDTOs = new LinkedList<MantenimientoDTO>();
        for (Iterator<MantenimientoVO> it = mantenimientoVOs.iterator(); it.hasNext();) {
            MantenimientoVO mantenimientoVO = it.next();
            mantenimientoDTOs.add(new MantenimientoDTO(mantenimientoVO.getId(),
                    mantenimientoVO.getDescripcion(),
                    mantenimientoVO.getTotal(),
                    mantenimientoVO.getVehiculo().getId(),
                    mantenimientoVO.getFecha(),
                    mantenimientoVO.getCantidad(),
                    mantenimientoVO.getUnidadmedida(),
                    mantenimientoVO.getDetalle(),
                    mantenimientoVO.getPreciounitario()));
                    //System.out.println("Fechas: " + mantenimientoVO.getFecha());
        }

        return mantenimientoDTOs;
    }

    public List<MantenimientoDTO> getAllByDescription() {
        List<MantenimientoVO> mantenimientoVOs = mantenimientoDao.getAllGroupByDescription();
        List<MantenimientoDTO> mantenimientoDTOs = new LinkedList<MantenimientoDTO>();
        for (Iterator<MantenimientoVO> it = mantenimientoVOs.iterator(); it.hasNext();) {
            MantenimientoVO mantenimientoVO = it.next();
            mantenimientoDTOs.add(new MantenimientoDTO(mantenimientoVO.getId(),
                    mantenimientoVO.getDescripcion(),
                    mantenimientoVO.getTotal(),
                    mantenimientoVO.getVehiculo().getId(),
                    mantenimientoVO.getFecha(),
                    mantenimientoVO.getCantidad(),
                    mantenimientoVO.getUnidadmedida(),
                    mantenimientoVO.getDetalle(),
                    mantenimientoVO.getPreciounitario()));

        }
        return mantenimientoDTOs;
    }

    public List<MantenimientoDTO> getAllByDetalle() {
        List<MantenimientoVO> mantenimientoVOs = mantenimientoDao.getAllGroupByDetalle();
        List<MantenimientoDTO> mantenimientoDTOs = new LinkedList<MantenimientoDTO>();
        for (Iterator<MantenimientoVO> it = mantenimientoVOs.iterator(); it.hasNext();) {
            MantenimientoVO mantenimientoVO = it.next();
            mantenimientoDTOs.add(new MantenimientoDTO(mantenimientoVO.getId(),
                    mantenimientoVO.getDescripcion(),
                    mantenimientoVO.getTotal(),
                    mantenimientoVO.getVehiculo().getId(),
                    mantenimientoVO.getFecha(),
                    mantenimientoVO.getCantidad(),
                    mantenimientoVO.getUnidadmedida(),
                    mantenimientoVO.getDetalle(),
                    mantenimientoVO.getPreciounitario()));

        }
        return mantenimientoDTOs;
    }

    public List<MantenimientoDTO> getAllByUnidadMedida() {
        List<MantenimientoVO> mantenimientoVOs = mantenimientoDao.getAllGroupByUnidadMedida();
        List<MantenimientoDTO> mantenimientoDTOs = new LinkedList<MantenimientoDTO>();
        for (Iterator<MantenimientoVO> it = mantenimientoVOs.iterator(); it.hasNext();) {
            MantenimientoVO mantenimientoVO = it.next();
            mantenimientoDTOs.add(new MantenimientoDTO(mantenimientoVO.getId(),
                    mantenimientoVO.getDescripcion(),
                    mantenimientoVO.getTotal(),
                    mantenimientoVO.getVehiculo().getId(),
                    mantenimientoVO.getFecha(),
                    mantenimientoVO.getCantidad(),
                    mantenimientoVO.getUnidadmedida(),
                    mantenimientoVO.getDetalle(),
                    mantenimientoVO.getPreciounitario()));

        }
        return mantenimientoDTOs;
    }

    public MantenimientoDTO getByIndex(int indice) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public MantenimientoDTO getById(int voId) {
        
        MantenimientoVO mantenimientoVO = mantenimientoDao.get(voId);
        MantenimientoDTO mantenimientoDTO = new MantenimientoDTO();
        mantenimientoDTO.setId(mantenimientoVO.getId());
        mantenimientoDTO.setDescripcion(mantenimientoVO.getDescripcion());
        mantenimientoDTO.setTotal(mantenimientoVO.getTotal());
        mantenimientoDTO.setFecha(mantenimientoVO.getFecha());
        mantenimientoDTO.setCantidad(mantenimientoVO.getCantidad());
        mantenimientoDTO.setUnidadmedida(mantenimientoVO.getUnidadmedida());
        mantenimientoDTO.setDetalle(mantenimientoVO.getDetalle());
        mantenimientoDTO.setPreciounitario(mantenimientoVO.getPreciounitario());
        
        return mantenimientoDTO;
    }

    public int getIdAtIndex(int indice) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getIndexOf(int voId) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void saveOrUpdate(MantenimientoDTO mantenimientoDTO, int vehiculoId) {
        VehiculoVO vehiculoVO = new VehiculoVO();
        vehiculoVO.setId(vehiculoId);

        MantenimientoVO mantenimientoVO = new MantenimientoVO();
        if(mantenimientoDTO.getId() != 0)
            mantenimientoVO.setId(mantenimientoDTO.getId());
        mantenimientoVO.setDescripcion(mantenimientoDTO.getDescripcion());
        mantenimientoVO.setTotal(mantenimientoDTO.getTotal());
        mantenimientoVO.setFecha(mantenimientoDTO.getFecha());
        mantenimientoVO.setCantidad(mantenimientoDTO.getCantidad());
        mantenimientoVO.setUnidadmedida(mantenimientoDTO.getUnidadmedida());
        mantenimientoVO.setDetalle(mantenimientoDTO.getDetalle());
        mantenimientoVO.setPreciounitario(mantenimientoDTO.getPreciounitario());
        mantenimientoVO.setVehiculo(vehiculoVO);

        mantenimientoDao.saveOrUpdate(mantenimientoVO);
    }

    public void saveOrUpdate(MantenimientoDTO mantenimientoDTO){
        
    }

    public void deleteById(int i) {
        mantenimientoDao.deleteById(i);
    }

    public void deleteByIndex(int index) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void updateListVo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public MantenimientoDao getMantenimientoDao() {
        return mantenimientoDao;
    }

    public void setMantenimientoDao(MantenimientoDao mantenimientoDao) {
        this.mantenimientoDao = mantenimientoDao;
    }

    public VehiculoDao getVehiculoDao() {
        return vehiculoDao;
    }

    public void setVehiculoDao(VehiculoDao vehiculoDao) {
        this.vehiculoDao = vehiculoDao;
    }

    
    private MantenimientoDao mantenimientoDao;
    private VehiculoDao vehiculoDao;
}
